package com.briup.day03;

import java.util.Scanner;

/**
 * 方法学习类
 */
public class MethodStudy {
    /*
     方法的作用：在Java中，方法可以理解为 对于某一个具体问题的解决方案；
     如Math中random()方法是对于程序获取随机数的问题，sqrt()方法解决了
     对数据开平方根的问题；
     为什么要将某一个具体问题的解决方案设计成方法？
        因为方法能够被反复多次的调用，如果将某一个问题的解决方案设计成方法后，
        在后续遇到相同问题/相似的问题，可以调用已有的解决方案进行解决；如此，
        我们在编写程序时，就能节约精力，将更多的精力用在解决核心的业务问题上；
        并且，我们在编写代码时，强调代码可复用原则，即相同/相似的代码必须要
        实现复用，即不能让代码冗余
     */
    public static void main(String[] args) {
        // 输出一个菱形
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入菱形的高度");
        int n = sc.nextInt();
        // 打印上半部分
        for (int i = 1; i <= n; i++) {
            printGraphic(n, i);
        }
        // 打印下半部分
        for (int i = n - 1; i > 0; i--) {
            printGraphic(n, i);
        }
        System.out.println();
        for (int i = 1; i <= 5; i++) {
            printGraphic(5, i);
        }
    }

    // 这里看似没有修饰符，实际存在一个缺省的权限修饰符
    void test2() {

    }

    // 编写一个方法，封装打印指定行数中空格和*比例图案的方法
    public static void printGraphic(int n, int i) {
        // 控制每一行中 * 所在的位置，如第一行中，
        // 如果*要在最中间，那么需要打印n-i次" "
        for (int j = 1; j <= n - i; j++) {
            System.out.print(" ");
        }
        // 控制每一行中*的输出，因为打印的是等腰三角形，
        // 所以每一行*的个数与行数的关系为：2*i-1，i为行数
        for (int j = 1; j <= 2 * i - 1; j++) {
            System.out.print("*");
        }
        System.out.println();
    }
}
